﻿using System;

namespace BoilerEvent_tz
{
    // 发布器类
    class DelegateTest
    {
        public delegate void Delegate_tz();

        public event Delegate_tz Delegate_tz0;

        public static void Get()
        {
            Console.WriteLine("这是触发事件的第一个方法，此方法在事件类中");
        }

        public void Inter()
        {
            Console.WriteLine("开始调用事件方法");
            Delegate_tz0();
        }
    }

    // 订阅器类
    class Test
    {
        public Test()
        {

        }

        public void TryEvent()
        {
            Console.WriteLine("这是触发事件的第三个方法，在订阅器中，这才是正宗的订阅器类");
            Console.ReadKey();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            DelegateTest delegateTest0 = new DelegateTest();
            // 主体函数中根据需求组装事件，组装过程类似委托多播
            delegateTest0.Delegate_tz0 += new DelegateTest.Delegate_tz(DelegateTest.Get);
            delegateTest0.Delegate_tz0 += new DelegateTest.Delegate_tz(Method1);
            delegateTest0.Delegate_tz0 += new DelegateTest.Delegate_tz(new Test().TryEvent);
            // 执行操作，以触发事件
            delegateTest0.Inter();

            Console.ReadKey();
        }

        public static void Method1()
        {
            Console.WriteLine("这是触发事件的第二个方法，在主体Main函数中");
        }
    }
}